#include <iostream>
#include <string>

using namespace std;

int main(int argc, char const *argv[])
{

	string str1 = "假盘敲烂,工资上万";
	// 打印字符中的个数
	// printf("str1字符的个数为%ld\n", str1.size());

	// 1.赋值操作 以下四种
	// 直接复制
	string str_1 = "键盘敲烂";
	// 使用赋值运算符
	string s2;
	s2 = "工资上万";
	// 拷贝构造
	string str_2("工资上万");
	string str_3(str_2);
	// 重复字符赋值  打印10个a字符
	string str_4(5, 'a');
	// 2.字符串的拼接
	//'+'直接拼接
	str_3 = str_1 + str_2;
	// cout << "str_3 = " << str_3 << endl;

	// append()函数拼接
	str_3.append("是奋斗目标");
	// cout << "str_3 = " << str_3 << endl;

	// 3.字符串的查找和替换
	str_4.append("工资上万");
	str_4.append(5, 'a');
	// size_t pos = str_4.find("工资上万"); // 返回第一个字符所在的位置
	//  << "工资上万在" << pos << "号位置" << endl;
	// str_4.replace(pos + 6, 6, "千万");
	// cout << "str_4 = " << str_4 << endl;

	// 3.字符串的比较
	string str_5 = "makfile";
	string str_6 = "gcc_-lstdc++";
	if (str_5 == str_6)
	{
		cout << "The strings are equal" << endl;
	}
	else if (str_5 < str_6)
	{
		cout << "str_5 comes before str_6" << endl;
	}
	else
	{
		cout << "str_5 comes after str_6" << endl;
	}

	// 4.字符串存取   下标方式不会检查是否越界，at()会判断是否越界
	char ch_1 = str_5[0];
	char ch_2 = str_5.at(1);
	cout << "str_1[0] = " << ch_1 << " str_1.at(1) = " << ch_2 << endl;

	// 5.字符串插入
	str_6.insert(0, "用gcc编译.cpp文件用 ");
	cout << "str_6 = " << str_6 << endl;

	// 6.字符串删除
	str_4.erase(0, 5); // 从0索引开始删除5个字符
	cout << "str_4 = " << str_4 << endl;

	// 7.字符串清空  将字符串变成空字符串
	str_1.clear();
	//8.字符串风格转换 
	/*
	C++ 转 C：使用 .c_str()。
	C 转 C++：直接赋值即可。
	*/
	const char *cStr = "Hello, C";//c风格的字符串(字符数组)
	string cppStr = cStr; // 自动转换为 C++ 字符串
	cout << cppStr << endl;
	printf("str_3=%s\n", str_3.c_str());


	
	return 0;
}
